#ifndef CLAUSE_TXE5OUP

#define CLAUSE_TXE5OUP

#include <set>
#include <iostream>
#include <sstream> 

namespace SAT
{
    class Var;
    class SAT;

    class Clause
    {
        friend class SAT;

    public:
        Clause ( );
        virtual ~Clause ();

        void afficher();
    
        Clause operator! () const;
        Clause operator* (const Clause &c) const;
        Clause operator* (Var &v) const;
        Clause operator+ (const Clause &c) const;
        Clause operator+ (Var &v) const;


    protected:
        std::set< std::set< std::pair< Var*, bool > > > _ssData;


    private:

        void inverce( std::set< std::set< std::pair<Var*, bool> > >::iterator begin, std::set< std::set< std::pair<Var*, bool> > >::iterator end, std::set< std::pair<Var*, bool > > result );


        
    };

    Clause operator! (Var &v);
    Clause operator+ (Var &v1, Var &v2);
    Clause operator* (Var &v1, Var &v2);

    Clause operator+ (Var &v, const Clause &c);
    Clause operator* (Var &v, const Clause &c);
}

#endif /* end of include guard: CLAUSE_TXE5OUP */
